package eventos.abrir;

import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import logica.Relacion;

import controlador.IControladorAtributo;
import controlador.IObjDelModConRefExternaEntidad;
import eventos.EventoCancelarEdición;
import eventos.aceptar.EventoAceptarRelacionEditada;

import vista.objetos.RelacionGraficable;
import vista.paneles.ElementoNoExistenteException;
import vista.ventanas.VentanaRelacion;

public class EventoEditarVentanaRelacion extends EventoAbrirVentanaRelacion
{
	private RelacionGraficable relacionAEditar;
	
	public EventoEditarVentanaRelacion(JFrame ventanaPadre, IObjDelModConRefExternaEntidad controladorRelacion, IControladorAtributo controladorAtributo, RelacionGraficable relacionAEditar) 
	{
		super(ventanaPadre, controladorRelacion, controladorAtributo);
		
		this.relacionAEditar = relacionAEditar;
	}

	public void mouseReleased(MouseEvent e)
	{
		VentanaRelacion ventana;
		Relacion relacion = (Relacion) relacionAEditar.getObjetoDiagramaDecorado();
		try
		{
			ventana = new VentanaRelacion(this.getVentanaPadre(), this.getControlador().getProyectoActual().getTipoDeRelaciones(), relacion);
			
			/*
			 * guardo el estado que tenía la relación antes de ser editada por si el usuario
			 * decide cancelar la edición.
			 */
			super.getControlador().setGraficableEditando(this.relacionAEditar.getMementoGenerico());

			EventoAceptarRelacionEditada eventoAceptar = new EventoAceptarRelacionEditada(ventana, this.getControlador(), relacionAEditar);
			ventana.escucharEventosBotonAceptar(eventoAceptar);
			
			EventoCancelarEdición eventoCancelar = new EventoCancelarEdición();
			ventana.escucharEventosBotonCancelar(eventoCancelar);
			
			this.agregarEventos(ventana);
			
			ventana.setVisible(true);
		} 
		catch (ElementoNoExistenteException e1)
		{
			JOptionPane.showMessageDialog(this.getVentanaPadre(), e1.getMessage(), "Tipo de Relacion no existente", JOptionPane.ERROR_MESSAGE);
		}
	

	}

}
